The animation needs the icons' final positions, so we currently defer
it to a ::notify::allocation handler; however as starting the animation
during an allocation cycle would trigger a Clutter warning, it is
further deferred to a MetaLater. While this usually works, it is possible
that the allocation is already valid when we connect the signal, in which
case the animation is triggered at a later unexpected time. Switch to
a more robust ::paint handler instead, which also allows us to get rid
of the double-delay.
https://bugzilla.gnome.org/show_bug.cgi?id=736148
}
if (animationDirection == IconGrid.AnimationDirection.IN) {
- let toAnimate = this._grid.actor.connect('notify::allocation', Lang.bind(this,
- function() {
- this._grid.actor.disconnect(toAnimate);
- // We need to hide the grid temporary to not flash it
- // for a frame
- this._grid.actor.opacity = 0;
- Meta.later_add(Meta.LaterType.BEFORE_REDRAW,
- Lang.bind(this, function() {
- this._doSpringAnimation(animationDirection)
- }));
- }));
+ let id = this._grid.actor.connect('paint', () => {
+ this._grid.actor.disconnect(id);
+ this._doSpringAnimation(animationDirection);
+ });
} else {
this._doSpringAnimation(animationDirection);
}